﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WC.BL.BE;
using WC.DL.DALC.IF;
using System.Configuration;

namespace WC.DL.DALC.SAP
{
    public class ParametroDALC : IParametroDALC
    {
        
       public static ParametroDALC Instance() {
            if (_instance == null)
            {
                lock (typeof(ParametroDALC))
                {
                    if (_instance == null)
                    {
                        _instance = new ParametroDALC();
                    }
                }
            }
            return _instance;
        }

        private ParametroDALC() { }
        private static volatile ParametroDALC _instance = null;



        public int getDecimales()
        {
            return ParametroDALC.getDecimalesStatic;
        }
        /// <summary>
        /// Busca en el archivo de configuración el valor de un key
        /// </summary>
        /// <param name="key">Nombre de una entrada en el archivo de configuración</param>
        /// <returns>Valor asociado al key</returns>
        public string getParamValue(string key)
        {
            return getParamValueStatic(key);
        }
        public bool esTipoXY(string pCodigo, string pConfigKey)
        {
            return esTipoX(pCodigo, pConfigKey);
        }
        public static int getDecimalesStatic
        {
            get { return Convert.ToInt16(getParamValueStatic("Decimales")); }
        }
        public static string getParamValueStatic(string key)
        {
            return  ConfigurationManager.AppSettings[key];
        }
        /// <summary>
        /// Verifica que sea un tipo determinado.
        /// </summary>
        /// <param name="pCodigo">Valor que se pide verificar.</param>
        /// <param name="pConfigKey">Llave que es buscada en el archivo de configuración.</param>
        /// <returns>Devuelve true o false </returns> 
        public static bool esTipoX(string pCod, string pConfigKey)
        {
            string[] codTipoDoc = getParamValueStatic(pConfigKey).Split(',');
            foreach (string str in codTipoDoc)
            {
                if (pCod == str)
                {
                    return true;
                }
            }
            return false;
        }
        public static DateTime dateSapToNet(string pFechaSAP)
        {
            DateTime tmpVar = new DateTime();
            try
            {
                tmpVar = new DateTime(Convert.ToInt16(pFechaSAP.Substring(0, 4)), Convert.ToInt16(pFechaSAP.Substring(4, 2)), Convert.ToInt16(pFechaSAP.Substring(6, 2)));
            }
            catch { tmpVar = new DateTime(); }
            return tmpVar;
        }
        public static string dateNetToSap(DateTime pFechaNET)
        {
            try
            {
                return pFechaNET.Year.ToString().PadLeft(4, '0') + pFechaNET.Month.ToString().PadLeft(2, '0') + pFechaNET.Day.ToString().PadLeft(2, '0');
            }
            catch { return string.Empty; }
        }


    }
}
